{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Initialization\n",
    "\n",
    "Welcome to the first assignment of \"Improving Deep Neural Networks\". \n",
    "\n",
    "Training your neural network requires specifying an initial value of the weights. A well chosen initialization method will help learning.  \n",
    "\n",
    "If you completed the previous course of this specialization, you probably followed our instructions for weight initialization, and it has worked out so far. But how do you choose the initialization for a new neural network? In this notebook, you will see how different initializations lead to different results. \n",
    "\n",
    "A well chosen initialization can:\n",
    "- Speed up the convergence of gradient descent\n",
    "- Increase the odds of gradient descent converging to a lower training (and generalization) error \n",
    "\n",
    "To get started, run the following cell to load the packages and the planar dataset you will try to classify."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import sklearn\n",
    "import sklearn.datasets\n",
    "from init_utils import sigmoid, relu, compute_loss, forward_propagation, backward_propagation\n",
    "from init_utils import update_parameters, predict, load_dataset, plot_decision_boundary, predict_dec\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# load image dataset: blue/red dots in circles\n",
    "train_X, train_Y, test_X, test_Y = load_dataset()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You would like a classifier to separate the blue dots from the red dots."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 - Neural Network model "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You will use a 3-layer neural network (already implemented for you). Here are the initialization methods you will experiment with:  \n",
    "- *Zeros initialization* --  setting `initialization = \"zeros\"` in the input argument.\n",
    "- *Random initialization* -- setting `initialization = \"random\"` in the input argument. This initializes the weights to large random values.  \n",
    "- *He initialization* -- setting `initialization = \"he\"` in the input argument. This initializes the weights to random values scaled according to a paper by He et al., 2015. \n",
    "\n",
    "**Instructions**: Please quickly read over the code below, and run it. In the next part you will implement the three initialization methods that this `model()` calls."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = \"he\"):\n",
    "    \"\"\"\n",
    "    Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.\n",
    "    \n",
    "    Arguments:\n",
    "    X -- input data, of shape (2, number of examples)\n",
    "    Y -- true \"label\" vector (containing 0 for red dots; 1 for blue dots), of shape (1, number of examples)\n",
    "    learning_rate -- learning rate for gradient descent \n",
    "    num_iterations -- number of iterations to run gradient descent\n",
    "    print_cost -- if True, print the cost every 1000 iterations\n",
    "    initialization -- flag to choose which initialization to use (\"zeros\",\"random\" or \"he\")\n",
    "    \n",
    "    Returns:\n",
    "    parameters -- parameters learnt by the model\n",
    "    \"\"\"\n",
    "        \n",
    "    grads = {}\n",
    "    costs = [] # to keep track of the loss\n",
    "    m = X.shape[1] # number of examples\n",
    "    layers_dims = [X.shape[0], 10, 5, 1]\n",
    "    \n",
    "    # Initialize parameters dictionary.\n",
    "    if initialization == \"zeros\":\n",
    "        parameters = initialize_parameters_zeros(layers_dims)\n",
    "    elif initialization == \"random\":\n",
    "        parameters = initialize_parameters_random(layers_dims)\n",
    "    elif initialization == \"he\":\n",
    "        parameters = initialize_parameters_he(layers_dims)\n",
    "\n",
    "    # Loop (gradient descent)\n",
    "\n",
    "    for i in range(0, num_iterations):\n",
    "\n",
    "        # Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.\n",
    "        a3, cache = forward_propagation(X, parameters)\n",
    "        \n",
    "        # Loss\n",
    "        cost = compute_loss(a3, Y)\n",
    "\n",
    "        # Backward propagation.\n",
    "        grads = backward_propagation(X, Y, cache)\n",
    "        \n",
    "        # Update parameters.\n",
    "        parameters = update_parameters(parameters, grads, learning_rate)\n",
    "        \n",
    "        # Print the loss every 1000 iterations\n",
    "        if print_cost and i % 1000 == 0:\n",
    "            print(\"Cost after iteration {}: {}\".format(i, cost))\n",
    "            costs.append(cost)\n",
    "            \n",
    "    # plot the loss\n",
    "    plt.plot(costs)\n",
    "    plt.ylabel('cost')\n",
    "    plt.xlabel('iterations (per hundreds)')\n",
    "    plt.title(\"Learning rate =\" + str(learning_rate))\n",
    "    plt.show()\n",
    "    \n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 - Zero initialization\n",
    "\n",
    "There are two types of parameters to initialize in a neural network:\n",
    "- the weight matrices $(W^{[1]}, W^{[2]}, W^{[3]}, ..., W^{[L-1]}, W^{[L]})$\n",
    "- the bias vectors $(b^{[1]}, b^{[2]}, b^{[3]}, ..., b^{[L-1]}, b^{[L]})$\n",
    "\n",
    "**Exercise**: Implement the following function to initialize all parameters to zeros. You'll see later that this does not work well since it fails to \"break symmetry\", but lets try it anyway and see what happens. Use np.zeros((..,..)) with the correct shapes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: initialize_parameters_zeros \n",
    "\n",
    "def initialize_parameters_zeros(layers_dims):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    layer_dims -- python array (list) containing the size of each layer.\n",
    "    \n",
    "    Returns:\n",
    "    parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n",
    "                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n",
    "                    b1 -- bias vector of shape (layers_dims[1], 1)\n",
    "                    ...\n",
    "                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n",
    "                    bL -- bias vector of shape (layers_dims[L], 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    parameters = {}\n",
    "    L = len(layers_dims)            # number of layers in the network\n",
    "    \n",
    "    for l in range(1, L):\n",
    "        ### START CODE HERE ### (≈ 2 lines of code)\n",
    "        parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1]))\n",
    "        parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n",
    "        ### END CODE HERE ###\n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1 = [[0. 0. 0.]\n",
      " [0. 0. 0.]]\n",
      "b1 = [[0.]\n",
      " [0.]]\n",
      "W2 = [[0. 0.]]\n",
      "b2 = [[0.]]\n"
     ]
    }
   ],
   "source": [
    "parameters = initialize_parameters_zeros([3,2,1])\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table> \n",
    "    <tr>\n",
    "    <td>\n",
    "    **W1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.  0.  0.]\n",
    " [ 0.  0.  0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]\n",
    " [ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **W2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.  0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "\n",
    "</table> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run the following code to train your model on 15,000 iterations using zeros initialization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after iteration 0: 0.6931471805599453\n",
      "Cost after iteration 1000: 0.6931471805599453\n",
      "Cost after iteration 2000: 0.6931471805599453\n",
      "Cost after iteration 3000: 0.6931471805599453\n",
      "Cost after iteration 4000: 0.6931471805599453\n",
      "Cost after iteration 5000: 0.6931471805599453\n",
      "Cost after iteration 6000: 0.6931471805599453\n",
      "Cost after iteration 7000: 0.6931471805599453\n",
      "Cost after iteration 8000: 0.6931471805599453\n",
      "Cost after iteration 9000: 0.6931471805599453\n",
      "Cost after iteration 10000: 0.6931471805599455\n",
      "Cost after iteration 11000: 0.6931471805599453\n",
      "Cost after iteration 12000: 0.6931471805599453\n",
      "Cost after iteration 13000: 0.6931471805599453\n",
      "Cost after iteration 14000: 0.6931471805599453\n"
     ]
    },
    {
     "data": {
      "image/png": "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mBxusG2ipGeWP+8CHEJx9bKIiOiCxr4NZXudpDnAIoqvwJ5le5mkk4A+24PBMQtY4PVPJX8h8AVJphjO+rztm5qqNSIiOttipvvo7e11zrOIiNg4kpbY7q3rl6+kRkRErYRFRETUSlhERESthEVERNRKWERERK2ERURE1EpYRERErYRFRETUSlhERESthEVERNRKWERERK2ERURE1EpYRERErYRFRETUSlhERESthEVERNRKWERERK2ERURE1EpYRERErUbDQtIMSSskrZQ0t8X9p0m6obzdIun+sv1ASddJWibpRknvbLLOiIjobGxTDyxpDDAPOBzoBxZLWmh7+WAf28dX+h8HHFQuPgy81/atkvYElkhaZPv+puqNiIj2mtyzmA6stL3K9qPAAuDIDv1nAecD2L7F9q3lz2uAu4GeBmuNiIgOmgyLCcDqynJ/2bYBSXsDU4ArW9w3HRgH/LqBGiMiYhiaDAu1aHObvjOBC20/vt4DSHsA/w683/YTG2xAmi2pT1LfwMDA0y44IiJaazIs+oFJleWJwJo2fWdSDkENkrQT8H3gk7avb7WS7fm2e2339vRklCoioilNhsViYKqkKZLGUQTCwqGdJO0D7AJcV2kbB1wEnGv72w3WGBERw9BYWNheB8wBFgE3AxfYXibpJElHVLrOAhbYrg5RHQ28Gnhf5au1BzZVa0REdKb136NHr97eXvf19XW7jIiIUUXSEtu9df1yBndERNRKWERERK2ERURE1EpYRERErYRFRETUSlhERESthEVERNRKWERERK2ERURE1EpYRERErYRFRETUSlhERESthEVERNRKWERERK2ERURE1EpYRERErYRFRETUSlhERESthEVERNRKWERERK1Gw0LSDEkrJK2UNLfF/adJuqG83SLp/sp9P5B0v6RLm6wxIiLqjW3qgSWNAeYBhwP9wGJJC20vH+xj+/hK/+OAgyoPcSqwPfDBpmqMiIjhaXLPYjqw0vYq248CC4AjO/SfBZw/uGD7h8CDDdYXERHD1GRYTABWV5b7y7YNSNobmAJcuTEbkDRbUp+kvoGBgadcaEREdNZkWKhFm9v0nQlcaPvxjdmA7fm2e2339vT0bHSBERExPE2GRT8wqbI8EVjTpu9MKkNQERExsjQZFouBqZKmSBpHEQgLh3aStA+wC3Bdg7VERMTT0FhY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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On the train set:\n",
      "Accuracy: 0.5\n",
      "On the test set:\n",
      "Accuracy: 0.5\n"
     ]
    }
   ],
   "source": [
    "parameters = model(train_X, train_Y, initialization = \"zeros\")\n",
    "print (\"On the train set:\")\n",
    "predictions_train = predict(train_X, train_Y, parameters)\n",
    "print (\"On the test set:\")\n",
    "predictions_test = predict(test_X, test_Y, parameters)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The performance is really bad, and the cost does not really decrease, and the algorithm performs no better than random guessing. Why? Lets look at the details of the predictions and the decision boundary:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "predictions_train = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0]]\n",
      "predictions_test = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
      "  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n"
     ]
    }
   ],
   "source": [
    "print (\"predictions_train = \" + str(predictions_train))\n",
    "print (\"predictions_test = \" + str(predictions_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    173\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 174\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_colors_full_map\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'numpy.ndarray'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4231\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Then is 'c' acceptable as PathCollection facecolors?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4232\u001b[1;33m                 \u001b[0mcolors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_rgba_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4233\u001b[0m                 \u001b[0mn_elem\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba_array\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    274\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcc\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 275\u001b[1;33m         \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mto_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    276\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 176\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_to_rgba_no_colorcycle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    177\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36m_to_rgba_no_colorcycle\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    230\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 231\u001b[1;33m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"RGBA sequence should have length 3 or 4\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    232\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0malpha\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: RGBA sequence should have length 3 or 4",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-7-0ec6f7c907fb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_xlim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ylim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mplot_decision_boundary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mpredict_dec\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparameters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mT\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_X\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_Y\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\Desktop\\Improving-Deep-Neural-Networks\\week1\\Initialization\\init_utils.py\u001b[0m in \u001b[0;36mplot_decision_boundary\u001b[1;34m(model, X, y)\u001b[0m\n\u001b[0;32m    215\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x2'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    216\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x1'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 217\u001b[1;33m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSpectral\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    218\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    219\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, data, **kwargs)\u001b[0m\n\u001b[0;32m   2860\u001b[0m         \u001b[0mvmin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmin\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmax\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidths\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlinewidths\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2861\u001b[0m         verts=verts, edgecolors=edgecolors, **({\"data\": data} if data\n\u001b[1;32m-> 2862\u001b[1;33m         is not None else {}), **kwargs)\n\u001b[0m\u001b[0;32m   2863\u001b[0m     \u001b[0msci\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m__ret\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2864\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0m__ret\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36minner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1808\u001b[0m                         \u001b[1;34m\"the Matplotlib list!)\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1809\u001b[0m                         RuntimeWarning, stacklevel=2)\n\u001b[1;32m-> 1810\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1811\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1812\u001b[0m         inner.__doc__ = _add_data_doc(inner.__doc__,\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4243\u001b[0m                         \u001b[1;34m\"acceptable for use with 'x' with size {xs}, \"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   4244\u001b[0m                         \u001b[1;34m\"'y' with size {ys}.\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4245\u001b[1;33m                         \u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mn_elem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mys\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4246\u001b[0m                     )\n\u001b[0;32m   4247\u001b[0m                 \u001b[1;31m# Both the mapping *and* the RGBA conversion failed: pretty\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300."
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title(\"Model with Zeros initialization\")\n",
    "axes = plt.gca()\n",
    "axes.set_xlim([-1.5,1.5])\n",
    "axes.set_ylim([-1.5,1.5])\n",
    "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The model is predicting 0 for every example. \n",
    "\n",
    "In general, initializing all the weights to zero results in the network failing to break symmetry. This means that every neuron in each layer will learn the same thing, and you might as well be training a neural network with $n^{[l]}=1$ for every layer, and the network is no more powerful than a linear classifier such as logistic regression. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color='blue'>\n",
    "**What you should remember**:\n",
    "- The weights $W^{[l]}$ should be initialized randomly to break symmetry. \n",
    "- It is however okay to initialize the biases $b^{[l]}$ to zeros. Symmetry is still broken so long as $W^{[l]}$ is initialized randomly. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3 - Random initialization\n",
    "\n",
    "To break symmetry, lets intialize the weights randomly. Following random initialization, each neuron can then proceed to learn a different function of its inputs. In this exercise, you will see what happens if the weights are intialized randomly, but to very large values. \n",
    "\n",
    "**Exercise**: Implement the following function to initialize your weights to large random values (scaled by \\*10) and your biases to zeros. Use `np.random.randn(..,..) * 10` for weights and `np.zeros((.., ..))` for biases. We are using a fixed `np.random.seed(..)` to make sure your \"random\" weights  match ours, so don't worry if running several times your code gives you always the same initial values for the parameters. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: initialize_parameters_random\n",
    "\n",
    "def initialize_parameters_random(layers_dims):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    layer_dims -- python array (list) containing the size of each layer.\n",
    "    \n",
    "    Returns:\n",
    "    parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n",
    "                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n",
    "                    b1 -- bias vector of shape (layers_dims[1], 1)\n",
    "                    ...\n",
    "                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n",
    "                    bL -- bias vector of shape (layers_dims[L], 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    np.random.seed(3)               # This seed makes sure your \"random\" numbers will be the as ours\n",
    "    parameters = {}\n",
    "    L = len(layers_dims)            # integer representing the number of layers\n",
    "    \n",
    "    for l in range(1, L):\n",
    "        ### START CODE HERE ### (≈ 2 lines of code)\n",
    "        parameters['W' + str(l)] = np.random.randn(layers_dims[l],layers_dims[l-1]) * 10\n",
    "        parameters['b' + str(l)] =  np.zeros((layers_dims[l], 1))\n",
    "        ### END CODE HERE ###\n",
    "\n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1 = [[ 17.88628473   4.36509851   0.96497468]\n",
      " [-18.63492703  -2.77388203  -3.54758979]]\n",
      "b1 = [[0.]\n",
      " [0.]]\n",
      "W2 = [[-0.82741481 -6.27000677]]\n",
      "b2 = [[0.]]\n"
     ]
    }
   ],
   "source": [
    "parameters = initialize_parameters_random([3, 2, 1])\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table> \n",
    "    <tr>\n",
    "    <td>\n",
    "    **W1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 17.88628473   4.36509851   0.96497468]\n",
    " [-18.63492703  -2.77388203  -3.54758979]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]\n",
    " [ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **W2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[-0.82741481 -6.27000677]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "\n",
    "</table> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run the following code to train your model on 15,000 iterations using random initialization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\Desktop\\Improving-Deep-Neural-Networks\\week1\\Initialization\\init_utils.py:145: RuntimeWarning: divide by zero encountered in log\n",
      "  logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n",
      "C:\\Users\\Administrator\\Desktop\\Improving-Deep-Neural-Networks\\week1\\Initialization\\init_utils.py:145: RuntimeWarning: invalid value encountered in multiply\n",
      "  logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after iteration 0: inf\n",
      "Cost after iteration 1000: 0.6250982793959966\n",
      "Cost after iteration 2000: 0.5981216596703697\n",
      "Cost after iteration 3000: 0.5638417572298645\n",
      "Cost after iteration 4000: 0.5501703049199763\n",
      "Cost after iteration 5000: 0.5444632909664456\n",
      "Cost after iteration 6000: 0.5374513807000807\n",
      "Cost after iteration 7000: 0.4764042074074983\n",
      "Cost after iteration 8000: 0.39781492295092263\n",
      "Cost after iteration 9000: 0.3934764028765484\n",
      "Cost after iteration 10000: 0.3920295461882659\n",
      "Cost after iteration 11000: 0.38924598135108\n",
      "Cost after iteration 12000: 0.3861547485712325\n",
      "Cost after iteration 13000: 0.384984728909703\n",
      "Cost after iteration 14000: 0.3827828308349524\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On the train set:\n",
      "Accuracy: 0.83\n",
      "On the test set:\n",
      "Accuracy: 0.86\n"
     ]
    }
   ],
   "source": [
    "parameters = model(train_X, train_Y, initialization = \"random\")\n",
    "print (\"On the train set:\")\n",
    "predictions_train = predict(train_X, train_Y, parameters)\n",
    "print (\"On the test set:\")\n",
    "predictions_test = predict(test_X, test_Y, parameters)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you see \"inf\" as the cost after the iteration 0, this is because of numerical roundoff; a more numerically sophisticated implementation would fix this. But this isn't worth worrying about for our purposes. \n",
    "\n",
    "Anyway, it looks like you have broken symmetry, and this gives better results. than before. The model is no longer outputting all 0s. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 1\n",
      "  1 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0\n",
      "  0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 0\n",
      "  1 0 1 1 0 0 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0\n",
      "  0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1\n",
      "  1 0 1 0 1 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 0 1\n",
      "  0 1 1 0 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1\n",
      "  1 1 0 1 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1\n",
      "  1 1 1 1 0 0 0 1 1 1 1 0]]\n",
      "[[1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1\n",
      "  0 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0\n",
      "  1 1 1 1 1 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0]]\n"
     ]
    }
   ],
   "source": [
    "print (predictions_train)\n",
    "print (predictions_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    173\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 174\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_colors_full_map\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'numpy.ndarray'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4231\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Then is 'c' acceptable as PathCollection facecolors?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4232\u001b[1;33m                 \u001b[0mcolors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_rgba_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4233\u001b[0m                 \u001b[0mn_elem\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba_array\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    274\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcc\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 275\u001b[1;33m         \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mto_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    276\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 176\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_to_rgba_no_colorcycle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    177\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36m_to_rgba_no_colorcycle\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    230\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 231\u001b[1;33m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"RGBA sequence should have length 3 or 4\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    232\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0malpha\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: RGBA sequence should have length 3 or 4",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-12-7e9ab4692133>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_xlim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ylim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mplot_decision_boundary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mpredict_dec\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparameters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mT\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_X\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_Y\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\Desktop\\Improving-Deep-Neural-Networks\\week1\\Initialization\\init_utils.py\u001b[0m in \u001b[0;36mplot_decision_boundary\u001b[1;34m(model, X, y)\u001b[0m\n\u001b[0;32m    215\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x2'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    216\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x1'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 217\u001b[1;33m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSpectral\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    218\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    219\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, data, **kwargs)\u001b[0m\n\u001b[0;32m   2860\u001b[0m         \u001b[0mvmin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmin\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmax\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidths\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlinewidths\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2861\u001b[0m         verts=verts, edgecolors=edgecolors, **({\"data\": data} if data\n\u001b[1;32m-> 2862\u001b[1;33m         is not None else {}), **kwargs)\n\u001b[0m\u001b[0;32m   2863\u001b[0m     \u001b[0msci\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m__ret\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2864\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0m__ret\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36minner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1808\u001b[0m                         \u001b[1;34m\"the Matplotlib list!)\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1809\u001b[0m                         RuntimeWarning, stacklevel=2)\n\u001b[1;32m-> 1810\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1811\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1812\u001b[0m         inner.__doc__ = _add_data_doc(inner.__doc__,\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4243\u001b[0m                         \u001b[1;34m\"acceptable for use with 'x' with size {xs}, \"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   4244\u001b[0m                         \u001b[1;34m\"'y' with size {ys}.\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4245\u001b[1;33m                         \u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mn_elem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mys\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4246\u001b[0m                     )\n\u001b[0;32m   4247\u001b[0m                 \u001b[1;31m# Both the mapping *and* the RGBA conversion failed: pretty\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300."
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title(\"Model with large random initialization\")\n",
    "axes = plt.gca()\n",
    "axes.set_xlim([-1.5,1.5])\n",
    "axes.set_ylim([-1.5,1.5])\n",
    "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Observations**:\n",
    "- The cost starts very high. This is because with large random-valued weights, the last activation (sigmoid) outputs results that are very close to 0 or 1 for some examples, and when it gets that example wrong it incurs a very high loss for that example. Indeed, when $\\log(a^{[3]}) = \\log(0)$, the loss goes to infinity.\n",
    "- Poor initialization can lead to vanishing/exploding gradients, which also slows down the optimization algorithm. \n",
    "- If you train this network longer you will see better results, but initializing with overly large random numbers slows down the optimization.\n",
    "\n",
    "<font color='blue'>\n",
    "**In summary**:\n",
    "- Initializing weights to very large random values does not work well. \n",
    "- Hopefully intializing with small random values does better. The important question is: how small should be these random values be? Lets find out in the next part! "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4 - He initialization\n",
    "\n",
    "Finally, try \"He Initialization\"; this is named for the first author of He et al., 2015. (If you have heard of \"Xavier initialization\", this is similar except Xavier initialization uses a scaling factor for the weights $W^{[l]}$ of `sqrt(1./layers_dims[l-1])` where He initialization would use `sqrt(2./layers_dims[l-1])`.)\n",
    "\n",
    "**Exercise**: Implement the following function to initialize your parameters with He initialization.\n",
    "\n",
    "**Hint**: This function is similar to the previous `initialize_parameters_random(...)`. The only difference is that instead of multiplying `np.random.randn(..,..)` by 10, you will multiply it by $\\sqrt{\\frac{2}{\\text{dimension of the previous layer}}}$, which is what He initialization recommends for layers with a ReLU activation. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# GRADED FUNCTION: initialize_parameters_he\n",
    "\n",
    "def initialize_parameters_he(layers_dims):\n",
    "    \"\"\"\n",
    "    Arguments:\n",
    "    layer_dims -- python array (list) containing the size of each layer.\n",
    "    \n",
    "    Returns:\n",
    "    parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n",
    "                    W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n",
    "                    b1 -- bias vector of shape (layers_dims[1], 1)\n",
    "                    ...\n",
    "                    WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n",
    "                    bL -- bias vector of shape (layers_dims[L], 1)\n",
    "    \"\"\"\n",
    "    \n",
    "    np.random.seed(3)\n",
    "    parameters = {}\n",
    "    L = len(layers_dims) - 1 # integer representing the number of layers\n",
    "     \n",
    "    for l in range(1, L + 1):\n",
    "        ### START CODE HERE ### (≈ 2 lines of code)\n",
    "        parameters['W' + str(l)] = np.random.randn(layers_dims[l],layers_dims[l-1]) * np.sqrt(2./layers_dims[l-1])\n",
    "        parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))\n",
    "        ### END CODE HERE ###\n",
    "        \n",
    "    return parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W1 = [[ 1.78862847  0.43650985]\n",
      " [ 0.09649747 -1.8634927 ]\n",
      " [-0.2773882  -0.35475898]\n",
      " [-0.08274148 -0.62700068]]\n",
      "b1 = [[0.]\n",
      " [0.]\n",
      " [0.]\n",
      " [0.]]\n",
      "W2 = [[-0.03098412 -0.33744411 -0.92904268  0.62552248]]\n",
      "b2 = [[0.]]\n"
     ]
    }
   ],
   "source": [
    "parameters = initialize_parameters_he([2, 4, 1])\n",
    "print(\"W1 = \" + str(parameters[\"W1\"]))\n",
    "print(\"b1 = \" + str(parameters[\"b1\"]))\n",
    "print(\"W2 = \" + str(parameters[\"W2\"]))\n",
    "print(\"b2 = \" + str(parameters[\"b2\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Expected Output**:\n",
    "\n",
    "<table> \n",
    "    <tr>\n",
    "    <td>\n",
    "    **W1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 1.78862847  0.43650985]\n",
    " [ 0.09649747 -1.8634927 ]\n",
    " [-0.2773882  -0.35475898]\n",
    " [-0.08274148 -0.62700068]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b1**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]\n",
    " [ 0.]\n",
    " [ 0.]\n",
    " [ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **W2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[-0.03098412 -0.33744411 -0.92904268  0.62552248]]\n",
    "    </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "    <td>\n",
    "    **b2**\n",
    "    </td>\n",
    "        <td>\n",
    "    [[ 0.]]\n",
    "    </td>\n",
    "    </tr>\n",
    "\n",
    "</table> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run the following code to train your model on 15,000 iterations using He initialization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost after iteration 0: 0.8830537463419761\n",
      "Cost after iteration 1000: 0.6879825919728063\n",
      "Cost after iteration 2000: 0.6751286264523371\n",
      "Cost after iteration 3000: 0.6526117768893807\n",
      "Cost after iteration 4000: 0.6082958970572937\n",
      "Cost after iteration 5000: 0.5304944491717495\n",
      "Cost after iteration 6000: 0.4138645817071793\n",
      "Cost after iteration 7000: 0.3117803464844441\n",
      "Cost after iteration 8000: 0.23696215330322556\n",
      "Cost after iteration 9000: 0.18597287209206828\n",
      "Cost after iteration 10000: 0.15015556280371808\n",
      "Cost after iteration 11000: 0.12325079292273548\n",
      "Cost after iteration 12000: 0.09917746546525937\n",
      "Cost after iteration 13000: 0.08457055954024274\n",
      "Cost after iteration 14000: 0.07357895962677366\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On the train set:\n",
      "Accuracy: 0.9933333333333333\n",
      "On the test set:\n",
      "Accuracy: 0.96\n"
     ]
    }
   ],
   "source": [
    "parameters = model(train_X, train_Y, initialization = \"he\")\n",
    "print (\"On the train set:\")\n",
    "predictions_train = predict(train_X, train_Y, parameters)\n",
    "print (\"On the test set:\")\n",
    "predictions_test = predict(test_X, test_Y, parameters)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    173\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 174\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_colors_full_map\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'numpy.ndarray'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4231\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Then is 'c' acceptable as PathCollection facecolors?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4232\u001b[1;33m                 \u001b[0mcolors\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_rgba_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4233\u001b[0m                 \u001b[0mn_elem\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcolors\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba_array\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    274\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcc\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 275\u001b[1;33m         \u001b[0mresult\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mto_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    276\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36mto_rgba\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    175\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# Not in cache, or unhashable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 176\u001b[1;33m         \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_to_rgba_no_colorcycle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    177\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\colors.py\u001b[0m in \u001b[0;36m_to_rgba_no_colorcycle\u001b[1;34m(c, alpha)\u001b[0m\n\u001b[0;32m    230\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 231\u001b[1;33m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"RGBA sequence should have length 3 or 4\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    232\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m3\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0malpha\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: RGBA sequence should have length 3 or 4",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-16-b75eab11dd68>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_xlim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_ylim\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1.5\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0mplot_decision_boundary\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mpredict_dec\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparameters\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mT\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_X\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtrain_Y\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\Desktop\\Improving-Deep-Neural-Networks\\week1\\Initialization\\init_utils.py\u001b[0m in \u001b[0;36mplot_decision_boundary\u001b[1;34m(model, X, y)\u001b[0m\n\u001b[0;32m    215\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x2'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    216\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'x1'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 217\u001b[1;33m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSpectral\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    218\u001b[0m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    219\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, data, **kwargs)\u001b[0m\n\u001b[0;32m   2860\u001b[0m         \u001b[0mvmin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmin\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvmax\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlinewidths\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlinewidths\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2861\u001b[0m         verts=verts, edgecolors=edgecolors, **({\"data\": data} if data\n\u001b[1;32m-> 2862\u001b[1;33m         is not None else {}), **kwargs)\n\u001b[0m\u001b[0;32m   2863\u001b[0m     \u001b[0msci\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m__ret\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2864\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0m__ret\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36minner\u001b[1;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[0;32m   1808\u001b[0m                         \u001b[1;34m\"the Matplotlib list!)\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1809\u001b[0m                         RuntimeWarning, stacklevel=2)\n\u001b[1;32m-> 1810\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1811\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1812\u001b[0m         inner.__doc__ = _add_data_doc(inner.__doc__,\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[1;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)\u001b[0m\n\u001b[0;32m   4243\u001b[0m                         \u001b[1;34m\"acceptable for use with 'x' with size {xs}, \"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   4244\u001b[0m                         \u001b[1;34m\"'y' with size {ys}.\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 4245\u001b[1;33m                         \u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mn_elem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mys\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msize\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   4246\u001b[0m                     )\n\u001b[0;32m   4247\u001b[0m                 \u001b[1;31m# Both the mapping *and* the RGBA conversion failed: pretty\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 300, 'y' with size 300."
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title(\"Model with He initialization\")\n",
    "axes = plt.gca()\n",
    "axes.set_xlim([-1.5,1.5])\n",
    "axes.set_ylim([-1.5,1.5])\n",
    "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Observations**:\n",
    "- The model with He initialization separates the blue and the red dots very well in a small number of iterations.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 5 - Conclusions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "You have seen three different types of initializations. For the same number of iterations and same hyperparameters the comparison is:\n",
    "\n",
    "<table> \n",
    "    <tr>\n",
    "        <td>\n",
    "        **Model**\n",
    "        </td>\n",
    "        <td>\n",
    "        **Train accuracy**\n",
    "        </td>\n",
    "        <td>\n",
    "        **Problem/Comment**\n",
    "        </td>\n",
    "\n",
    "    </tr>\n",
    "        <td>\n",
    "        3-layer NN with zeros initialization\n",
    "        </td>\n",
    "        <td>\n",
    "        50%\n",
    "        </td>\n",
    "        <td>\n",
    "        fails to break symmetry\n",
    "        </td>\n",
    "    <tr>\n",
    "        <td>\n",
    "        3-layer NN with large random initialization\n",
    "        </td>\n",
    "        <td>\n",
    "        83%\n",
    "        </td>\n",
    "        <td>\n",
    "        too large weights \n",
    "        </td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "        <td>\n",
    "        3-layer NN with He initialization\n",
    "        </td>\n",
    "        <td>\n",
    "        99%\n",
    "        </td>\n",
    "        <td>\n",
    "        recommended method\n",
    "        </td>\n",
    "    </tr>\n",
    "</table> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color='blue'>\n",
    "**What you should remember from this notebook**:\n",
    "- Different initializations lead to different results\n",
    "- Random initialization is used to break symmetry and make sure different hidden units can learn different things\n",
    "- Don't intialize to values that are too large\n",
    "- He initialization works well for networks with ReLU activations. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "coursera": {
   "course_slug": "deep-neural-network",
   "graded_item_id": "XOESP",
   "launcher_item_id": "8IhFN"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
